<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-29853730</id><updated>2023-03-29T21:13:41.531-04:00</updated><category term="eSWT"/><category term="eclipse"/><category term="eRCP"/><category term="Java ME"/><category term="Nokia"/><category term="mobile"/><category term="S60"/><category term="Qt"/><category term="MIDP"/><category term="Speaking"/><category term="Symbian"/><category term="Android"/><category term="Series 40"/><category term="cordova"/><category term="eclipsecon"/><category term="JBoss"/><category term="MTJ"/><category term="Midlets"/><category term="SWT"/><category term="open source"/><category term="OSGi"/><category term="devices"/><category term="iOS"/><category term="ovi"/><category term="RCP"/><category term="aerogear"/><category term="phonegap"/><category term="thym"/><category term="webtools"/><category term="JSR-232"/><category term="JavaOne"/><category term="LCDUI"/><category term="Pulsar"/><category term="WidSets"/><category term="e4"/><category term="eclipse RT"/><category term="maemo"/><category term="node.js"/><category term="pidora"/><category term="raspberry pi"/><category term="scrumworks"/><category term="software engineering"/><category term="Angry Birds"/><category term="CDT"/><category term="Carbide C++"/><category term="DSDP"/><category term="JSDT"/><category term="JSR 271"/><category term="JavaScript"/><category term="Maps"/><category term="OpenVG"/><category term="Red Hat"/><category term="SMS"/><category term="agile"/><category term="app"/><category term="blogging"/><category term="browser"/><category term="code reviews"/><category term="eclipse converge"/><category term="eclipsist"/><category term="evangelism"/><category term="example"/><category term="generic server"/><category term="image"/><category term="kubernetes"/><category term="localization"/><category term="mobile web server"/><category term="multimedia"/><category term="mylyn"/><category term="refactoring"/><category term="runtime"/><category term="spotify"/><category term="twitter"/><category term="visual editor"/><title type='text'>Gorkem Ercan</title><subtitle type='html'>About developing software</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.gorkem-ercan.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/-/eclipse'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/search/label/eclipse'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/-/eclipse/-/eclipse?start-index=26&amp;max-results=25'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>40</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-29853730.post-7776204754090202700</id><published>2016-12-06T15:51:00.001-05:00</published><updated>2016-12-06T15:58:06.889-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="eclipse converge"/><category scheme="http://www.blogger.com/atom/ns#" term="eclipsecon"/><title type='text'>A conference for Eclipse heads</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://3.bp.blogspot.com/-_wMydjou3tk/WEcl_1eVRnI/AAAAAAAADKw/xfDJEMnxBdUMwIJc_P8yYxqD_kz5HqGkACLcB/s1600/Eclipse%2BConverge%2B-%2BSubmit%2Byour%2BProposal.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;171&quot; src=&quot;https://3.bp.blogspot.com/-_wMydjou3tk/WEcl_1eVRnI/AAAAAAAADKw/xfDJEMnxBdUMwIJc_P8yYxqD_kz5HqGkACLcB/s320/Eclipse%2BConverge%2B-%2BSubmit%2Byour%2BProposal.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Since, the &lt;a href=&quot;https://www.eclipsecon.org/2004/index.htm&quot;&gt;first EclipseCon&lt;/a&gt; in 2004, that was held in Disneyland, Eclipse had a conference in US. I missed all the Disney music of 2004 and my first EclipseCon was in &lt;a href=&quot;https://www.eclipsecon.org/2005/&quot;&gt;2005&lt;/a&gt; but I have presented on various EclipseCons since then. Throughout these years, I was able to observe the variances on interests for EclipseCon audiences. However it is a challenge to form an EclipseCon program that is equally interesting to developers of Eclipse technology and Eclipse users. This year the job had become a bit easier, to serve varying interests EclipseCon is teaming up with &lt;a href=&quot;http://devoxx.us/&quot;&gt;Devoxx US&lt;/a&gt; and becoming &lt;a href=&quot;https://www.eclipseconverge.org/na2017/&quot;&gt;Eclipse Converge&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
As part of the program committee for Eclipse Converge, my goal is to shape a program in the spirit of the early EclipseCons where the talks would be concentrated around building and innovating on Eclipse projects. If you have talks that are deep in Eclipse technology, please &lt;a href=&quot;https://www.eclipseconverge.org/na2017/cfp&quot;&gt;submit&lt;/a&gt; them. At  least I will be voting for them.&lt;br /&gt;
&lt;br /&gt;
And who knows we can bring the Disney music back to EclipseCon next year!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/7776204754090202700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/7776204754090202700'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2016/12/a-conference-for-eclipse-heads.html' title='A conference for Eclipse heads'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://3.bp.blogspot.com/-_wMydjou3tk/WEcl_1eVRnI/AAAAAAAADKw/xfDJEMnxBdUMwIJc_P8yYxqD_kz5HqGkACLcB/s72-c/Eclipse%2BConverge%2B-%2BSubmit%2Byour%2BProposal.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-5359208014862631840</id><published>2015-11-17T13:36:00.001-05:00</published><updated>2015-11-17T13:36:25.718-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript"/><category scheme="http://www.blogger.com/atom/ns#" term="JSDT"/><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><title type='text'>Benchmarking JavaScript parsers for Eclipse JSDT</title><content type='html'>&lt;div id=&quot;content&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;width: 100%;margin-left: auto;margin-right: auto;margin-top: 1.25em;margin-bottom: 0;max-width: 62.5em;*zoom: 1;position: relative;padding-left: .9375em;padding-right: .9375em;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;div class=&quot;paragraph&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;p style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 1.25rem;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;The JavaScript parser for the &lt;a href=&quot;https://eclipse.org/webtools/jsdt/&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;background: transparent;line-height: inherit;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;color: inherit!important;text-decoration: underline!important;&quot;&gt;Eclipse JSDT&lt;/a&gt;
project is outdated. It lacks support for the
latest &lt;a href=&quot;http://www.ecma-international.org/ecma-262/6.0/&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;background: transparent;line-height: inherit;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;color: inherit!important;text-decoration: underline!important;&quot;&gt;EcmaScript 2015 (ES6)&lt;/a&gt;
standard and has quality issues. Moreover, the parser on JSDT is derived
from the JDT&amp;#8217;s Java parser, hence it is not adopted by the JavaScript community
at large, leaving the JSDT committers as the sole maintainer. Luckily, there are
good quality JavaScript parsers that already support a large number of tools
built around it. However, these parsers, like most of the JavaScript tools, are
developed using JavaScript and requires additional effort to integrate with
Eclipse JSDT which runs on a Java VM. In the last few weeks, I have been
experimenting with alternatives that enables such integration.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;div class=&quot;title&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;line-height: 1.45;color: #7a2518;font-weight: 400;margin-top: 0;margin-bottom: .25em;text-rendering: optimizeLegibility;text-align: left;font-family: &amp;quot;Noto Serif&amp;quot;,&amp;quot;DejaVu Serif&amp;quot;,serif;font-size: 1rem;font-style: italic;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Parsers&lt;/div&gt;
&lt;p style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 1.25rem;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Before I go into the details of integration let me quickly introduce the parsers
that I have tried.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;hdlist&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;table style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;border-collapse: collapse;border-spacing: 0;background: none;margin-bottom: 1.25em;border: 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;tr style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;page-break-inside: avoid;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;td class=&quot;hdlist1&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0 .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;vertical-align: top;font-weight: bold;padding-bottom: 1.25em;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
Acorn
&lt;/td&gt;
&lt;td class=&quot;hdlist2&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0 .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;vertical-align: top;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;p style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 1.25rem;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;a href=&quot;https://github.com/ternjs/acorn&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;background: transparent;line-height: inherit;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;color: inherit!important;text-decoration: underline!important;&quot;&gt;Acorn&lt;/a&gt; is a tiny parser written in
JavaScript that supports the latest ES6 standard. It is one of the most adopted
parsers and used by several popular JavaScript tools. It parses
JavaScript to &lt;a href=&quot;https://github.com/estree/estree&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;background: transparent;line-height: inherit;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;color: inherit!important;text-decoration: underline!important;&quot;&gt;ESTree&lt;/a&gt; (SpiderMonkey)
&lt;a href=&quot;https://en.wikipedia.org/wiki/Abstract_syntax_tree&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;background: transparent;line-height: inherit;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;color: inherit!important;text-decoration: underline!important;&quot;&gt;AST&lt;/a&gt; format and is extensible
to support additional languages such as JSX, QML etc.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;page-break-inside: avoid;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;td class=&quot;hdlist1&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0 .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;vertical-align: top;font-weight: bold;padding-bottom: 1.25em;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
Esprima
&lt;/td&gt;
&lt;td class=&quot;hdlist2&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0 .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;vertical-align: top;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;p style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 1.25rem;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;a href=&quot;http://esprima.org/&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;background: transparent;line-height: inherit;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;color: inherit!important;text-decoration: underline!important;&quot;&gt;Esprima&lt;/a&gt; is also a fast, tiny parser that is written in
JavaScript, which also supports the latest ES6. Its development has been recently
moved to &lt;a href=&quot;https://jquery.org/&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;background: transparent;line-height: inherit;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;color: inherit!important;text-decoration: underline!important;&quot;&gt;JQuery foundation&lt;/a&gt; and has been in
use on &lt;a href=&quot;https://orionhub.org/&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;background: transparent;line-height: inherit;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;color: inherit!important;text-decoration: underline!important;&quot;&gt;Eclipse Orion&lt;/a&gt; for a while. Just like Acorn it also
uses the ESTree AST format.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;page-break-inside: avoid;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;td class=&quot;hdlist1&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0 .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;vertical-align: top;font-weight: bold;padding-bottom: 1.25em;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
Shift(java)
&lt;/td&gt;
&lt;td class=&quot;hdlist2&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0 .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;vertical-align: top;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;p style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 1.25rem;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;a href=&quot;https://github.com/shapesecurity/shift-java/tree/es6/src/main/java/com/shapesecurity/shift/parser&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;background: transparent;line-height: inherit;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;color: inherit!important;text-decoration: underline!important;&quot;&gt;Shift(java)&lt;/a&gt;
is the only Java based parser on my list. It is a relatively new parser.
It uses &lt;a href=&quot;http://shift-ast.org/&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;background: transparent;line-height: inherit;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;color: inherit!important;text-decoration: underline!important;&quot;&gt;Shift AST&lt;/a&gt; as its model which is different from the widely
adopted ESTree.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;admonitionblock note&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;table style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;border-collapse: separate;border-spacing: 0;background: none;margin-bottom: 1.25em;border: 0;width: 100%;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;tr style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;page-break-inside: avoid;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;td class=&quot;icon&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;text-align: center;width: 80px;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;div class=&quot;title&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-weight: bold;font-family: &amp;quot;Open Sans&amp;quot;,&amp;quot;DejaVu Sans&amp;quot;,sans-serif;text-transform: uppercase;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Note&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;content&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: 1em;color: rgba(0,0,0,.6);display: table-cell;line-height: 1.6;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;padding-left: 1.125em;padding-right: 1.25em;border-left: 1px solid #ddddd8;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;div class=&quot;title&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;line-height: 1.45;color: #7a2518;font-weight: 400;margin-top: 0;margin-bottom: .25em;text-rendering: optimizeLegibility;text-align: left;font-family: &amp;quot;Noto Serif&amp;quot;,&amp;quot;DejaVu Serif&amp;quot;,serif;font-size: 1rem;font-style: italic;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Why does AST model matter?&lt;/div&gt;
&lt;div class=&quot;paragraph&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;p style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 1.25rem;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;AST model is what actually what tools operate on. For instance a JavaScript linter
first uses a parser to generate an AST model and operates on the model to find
possible problems. As one can imagine, an IDE that uses a widely adopted AST
model can utilize the ecosystem of JavaScript tools more efficiently.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;margin-bottom: 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;p style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 1.25rem;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Eclipse JSDT already comes with a JSDT AST model that is used internally that is
very hard to replace. Therefore, regardless of the AST model generated by the
parser it will be converted to JSDT&amp;#8217;s own model before used. Which renders
&lt;a href=&quot;http://engineering.shapesecurity.com/2015/01/a-technical-comparison-of-shift-and.html&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;background: transparent;line-height: inherit;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;color: inherit!important;text-decoration: underline!important;&quot;&gt;discussions&lt;/a&gt;
around the AST models moot in JSDT&amp;#8217;s context.&lt;/p&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;div class=&quot;title&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;line-height: 1.45;color: #7a2518;font-weight: 400;margin-top: 0;margin-bottom: .25em;text-rendering: optimizeLegibility;text-align: left;font-family: &amp;quot;Noto Serif&amp;quot;,&amp;quot;DejaVu Serif&amp;quot;,serif;font-size: 1rem;font-style: italic;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Integration&lt;/div&gt;
&lt;p style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 1.25rem;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;The parsers other than Shift, which already runs on the Java VM, need a
mechanism to play nice with the Java VM. I have experimented with
3 mechanisms for running Acorn and Esprima for JSDT so far.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;hdlist&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;table style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;border-collapse: collapse;border-spacing: 0;background: none;margin-bottom: 1.25em;border: 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;tr style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;page-break-inside: avoid;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;td class=&quot;hdlist1&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0 .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;vertical-align: top;font-weight: bold;padding-bottom: 1.25em;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
Node.js
&lt;/td&gt;
&lt;td class=&quot;hdlist2&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0 .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;vertical-align: top;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;p style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 1.25rem;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Utilizes node.js to run the parser code. node.js runs as an external
process, receives the content to be parsed and return the results. I have
chosen to use console I/O to communicate between node.js and Java VM. There are
also other techniques such as running an http or a socket based server for communication.
In order to avoid the start up time for node.js, which does affect the performance
significantly, node.js process is actually kept running.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;page-break-inside: avoid;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;td class=&quot;hdlist1&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0 .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;vertical-align: top;font-weight: bold;padding-bottom: 1.25em;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
J2V8
&lt;/td&gt;
&lt;td class=&quot;hdlist2&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0 .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;vertical-align: top;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;p style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 1.25rem;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;A JNI based wrapper that bundles V8 JavaScript VM. It provides a low level
Java API to execute JavaScript on bare V8 engine. Although it uses V8, it does not
provide the full functionality of node.js and can only be used to execute selected
scripts, fortunately Acorn and Esprima parsers can be run with J2V8.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;page-break-inside: avoid;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;td class=&quot;hdlist1&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0 .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;vertical-align: top;font-weight: bold;padding-bottom: 1.25em;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
Nashorn
&lt;/td&gt;
&lt;td class=&quot;hdlist2&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0 .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;vertical-align: top;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;p style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 1.25rem;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;The JavaScript engine that is nowadays built into Java 8. Provides a
simple high level API to run JavaScript.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;div class=&quot;title&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;line-height: 1.45;color: #7a2518;font-weight: 400;margin-top: 0;margin-bottom: .25em;text-rendering: optimizeLegibility;text-align: left;font-family: &amp;quot;Noto Serif&amp;quot;,&amp;quot;DejaVu Serif&amp;quot;,serif;font-size: 1rem;font-style: italic;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Performance Benchmarks&lt;/div&gt;
&lt;p style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 1.25rem;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;The criteria for choosing a parser may vary from the feature set, to AST model
used, to even community size. However performance is the one criteria that would
make all others relevant. So in order to compare the performance of different
alternatives I have developed a number of
&lt;a href=&quot;https://github.com/gorkem/js-parser-benchmarks&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;background: transparent;line-height: inherit;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;color: inherit!important;text-decoration: underline!important;&quot;&gt;benchmark tests&lt;/a&gt; to compare parsers
and the mechanisms.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;p style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 1.25rem;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;All benchmark tests produce a result with an AST model, either in
JSON form or as a Java object model. Tests avoid the startup time for their
environments, for instance the startup time for the node.js process affects
the results significantly but are discarded by the tests. The current test sets use
&lt;em style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;font-style: italic;line-height: inherit;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;AngularJs 1.2.5&lt;/em&gt; and &lt;em style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;font-style: italic;line-height: inherit;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;JQuery Mobile 1.4.2 (JQM)&lt;/em&gt; as the JavaScript code to be parsed.&lt;/p&gt;
&lt;/div&gt;
&lt;table class=&quot;tableblock frame-all grid-rows spread&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;border-collapse: separate;border-spacing: 0;background: #fff;margin-bottom: 1.25em;border: 0 solid #dedede;width: 100%;max-width: 100%;border-width: 1px;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;caption class=&quot;title&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;line-height: 1.45;color: #7a2518;font-weight: 400;margin-top: 0;margin-bottom: .25em;text-rendering: optimizeLegibility;text-align: left;font-family: &amp;quot;Noto Serif&amp;quot;,&amp;quot;DejaVu Serif&amp;quot;,serif;font-size: 1rem;font-style: italic;white-space: nowrap;overflow: visible;max-width: 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Table 1. Average time for each benchmark&lt;/caption&gt;
&lt;colgroup style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;col style=&quot;width: 25%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;/col&gt;&lt;col style=&quot;width: 25%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;/col&gt;&lt;col style=&quot;width: 25%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;/col&gt;&lt;col style=&quot;width: 25%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;/col&gt;&lt;/colgroup&gt;
&lt;thead style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;display: table-header-group;background: #f7f8f7;font-weight: bold;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;tr style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;page-break-inside: avoid;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5em .625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);font-weight: bold;text-align: left;display: table-cell;line-height: 1.6;border: 0 solid #dedede;vertical-align: top;text-rendering: optimizeLegibility;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Parser(Script)&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5em .625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);font-weight: bold;text-align: left;display: table-cell;line-height: 1.6;border: 0 solid #dedede;vertical-align: top;text-rendering: optimizeLegibility;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Runtime&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5em .625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);font-weight: bold;text-align: left;display: table-cell;line-height: 1.6;border: 0 solid #dedede;vertical-align: top;text-rendering: optimizeLegibility;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Score&lt;/th&gt;
&lt;th class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5em .625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);font-weight: bold;text-align: left;display: table-cell;line-height: 1.6;border: 0 solid #dedede;vertical-align: top;text-rendering: optimizeLegibility;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Error&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;tr style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;page-break-inside: avoid;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Acorn (AngularJS)&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;J2V8&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;118.229 ms&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;± 1.453&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;page-break-inside: avoid;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Acorn (JQM)&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;J2V8&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;150.250 ms&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;± 4.579&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;page-break-inside: avoid;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Acorn (AngularJS)&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Nashorn&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;181.617 ms&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;± 6.421&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;page-break-inside: avoid;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Acorn (JQM)&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Nashorn&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;177.265 ms&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;± 9.074&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;page-break-inside: avoid;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Acorn (AngularJS)&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;NodeJS&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;59.115 ms&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;± 0.698&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;page-break-inside: avoid;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Acorn (JQM)&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;NodeJS&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;34.670 ms&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;± 0.250&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;page-break-inside: avoid;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Esprima (AngularJS)&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;J2V8&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;98.399 ms&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;± 0.77&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;page-break-inside: avoid;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Esprima (JQM)&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;J2V8&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;114.753 ms&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;± 1.007&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;page-break-inside: avoid;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Esprima (AngularJS)&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Nashorn&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;73.542 ms&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;± 0.450&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;page-break-inside: avoid;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Esprima (JQM)&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Nashorn&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;73.848 ms&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;± 0.885&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;page-break-inside: avoid;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Shift (Angular)&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;JavaVM&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;16.369 ms&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;± 1.019&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;page-break-inside: avoid;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;Shift (JQM)&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;JavaVM&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;15.900 ms&lt;/p&gt;&lt;/td&gt;
&lt;td class=&quot;tableblock halign-left valign-top&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: .5625em .625em;direction: ltr;font-size: inherit;color: rgba(0,0,0,.8);display: table-cell;line-height: 1.6;border: 0 solid #dedede;text-align: left;vertical-align: top;border-width: 0 0 1px 0;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;&lt;p class=&quot;tableblock&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 0;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;± 0.325&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class=&quot;paragraph&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;p style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 1.25rem;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;As expected Shift parser which runs directly on top of JavaVM is the quickest solution.
To be fair, Shift parser is missing several features such as
&lt;a href=&quot;https://github.com/shapesecurity/shift-java/issues/92&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;background: transparent;line-height: inherit;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;color: inherit!important;text-decoration: underline!important;&quot;&gt;source location&lt;/a&gt;,
&lt;a href=&quot;https://github.com/shapesecurity/shift-java/issues/93&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;background: transparent;line-height: inherit;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;color: inherit!important;text-decoration: underline!important;&quot;&gt;tolerant parsing&lt;/a&gt; and
&lt;a href=&quot;https://github.com/shapesecurity/shift-java/issues/94&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;background: transparent;line-height: inherit;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;color: inherit!important;text-decoration: underline!important;&quot;&gt;comments&lt;/a&gt; that may affect the parsing performance. However even
after these features added it may remain the quickest. I feel that the performance
for J2V8 can also improve with more creative use of the low level APIs however
there is so much memory copying between Java heap to JNI to V8 heap and back
I am not sure if it would be significant.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;paragraph&quot; style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;
&lt;p style=&quot;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0;padding: 0;direction: ltr;font-family: inherit;font-weight: 400;font-size: 1em;line-height: 1.6;margin-bottom: 1.25rem;text-rendering: optimizeLegibility;letter-spacing: -.01em;orphans: 3;widows: 3;-webkit-box-shadow: none!important;box-shadow: none!important;text-shadow: none!important;&quot;&gt;The surprise for me is the Esprima&amp;#8217;s performance with Nashorn. It is unexpected in two
ways. It is actually the third quickest option however Acorn does not give the same level of
performance.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/5359208014862631840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/5359208014862631840'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2015/11/benchmarking-javascript-parsers-for.html' title='Benchmarking JavaScript parsers for Eclipse JSDT'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-3289229113723063698</id><published>2015-03-20T11:25:00.000-04:00</published><updated>2015-03-20T11:36:21.739-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><category scheme="http://www.blogger.com/atom/ns#" term="thym"/><title type='text'>What is new on Eclipse Thym 0.2.0</title><content type='html'>We have just released a new version of Eclipse &lt;a href=&quot;https://www.eclipse.org/thym/&quot;&gt;Thym&lt;/a&gt;. &lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Compared to 0.1.0 release the highlights for the 0.2.0 release are.&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Working sets are supported on New Hybrid Mobile Project wizard:&lt;/b&gt;&amp;nbsp;You can add your Hybrid Mobile projects to JavaScript working sets during project creation.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Convert existing Eclipse projects to a Hybrid Mobile project:&lt;/b&gt;&amp;nbsp;Any existing Eclipse project, that has a proper config.xml and www directory, can be converted using the &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&lt;i&gt;Configure &amp;gt; Convert to Hybrid Mobile Project&lt;/i&gt; &lt;/span&gt;menu item. This feature also introduces a new API to enable adopters to programmatically convert existing projects to Hybrid Mobile projects.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Icon and Splash Screen support for iOS and Android builds:&lt;/b&gt;&amp;nbsp; If your config.xml has icon and/or splash screen references. Native project or executable exports created from Thym will honour them. Refer to Apache Cordova &lt;a href=&quot;http://cordova.apache.org/docs/en/4.0.0/config_ref_images.md.html#Icons%20and%20Splash%20Screens&quot;&gt;documentation&lt;/a&gt; for details of icon and splash screen support.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
As usual Thym 0.2.0 is available from these update sites and &lt;a href=&quot;https://marketplace.eclipse.org/content/eclipse-thym&quot;&gt;Eclipse marketplace&lt;/a&gt;.&lt;br /&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Update existing installs:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;http://download.eclipse.org/thym/releases/latest/&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Release repository good for building against:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;http://download.eclipse.org/thym/releases/0.2.0/&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/3289229113723063698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/3289229113723063698'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2015/03/what-is-new-on-eclipse-thym-020.html' title='What is new on Eclipse Thym 0.2.0'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-9215899887785249382</id><published>2014-07-14T21:57:00.000-04:00</published><updated>2014-07-14T21:57:13.268-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><category scheme="http://www.blogger.com/atom/ns#" term="thym"/><title type='text'>Adoption... Sort of</title><content type='html'>Apparently, &lt;a href=&quot;https://www.myeclipseide.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;myeclipse&lt;/a&gt; has started to use bits and pieces from &lt;a href=&quot;http://www.eclipse.org/thym&quot;&gt;Thym&lt;/a&gt;. It was brought to my attention that the plugin wizard &lt;a href=&quot;https://www.myeclipseide.com/images/image102.png&quot;&gt;image&lt;/a&gt; on the myeclipse feature &lt;a href=&quot;https://www.myeclipseide.com/module-htmlpages-display-pid-515.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;page&lt;/a&gt; is from Thym. You can compare it with an image of the same wizard on JBoss tools &lt;a href=&quot;http://tools.jboss.org/features/aerogear.html#cordova-plug-in-discovery-wizard&quot;&gt;features&lt;/a&gt; page for yourself. I have not tried the product myself hopefully it is working well.&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Normally, I would be very excited about a product adoption happening this quickly. However, the folks behind this product have a &lt;a href=&quot;https://www.youtube.com/watch?v=SeNDzbFv2f8&quot;&gt;different way&lt;/a&gt; of adopting open source software, which usually means project Thym will get zero benefits from this adoption. Of course, one can only hope for a positive surprise.&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/9215899887785249382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/9215899887785249382'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2014/07/adoption-sort-of.html' title='Adoption... Sort of'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-789507603256260846</id><published>2014-06-10T11:59:00.000-04:00</published><updated>2015-12-16T09:51:36.362-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cordova"/><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="JBoss"/><category scheme="http://www.blogger.com/atom/ns#" term="thym"/><title type='text'>Sharing Cordova projects becomes easier</title><content type='html'>Whether a project is created using &lt;a href=&quot;https://github.com/apache/cordova-cli&quot;&gt;Cordova&#39;s CLI &lt;/a&gt;or the &lt;a href=&quot;http://eclipse.org/thym&quot;&gt;Eclipse Thym&lt;/a&gt; (or &lt;a href=&quot;http://tools.jboss.org/features/aerogear.html&quot;&gt;JBoss Tools&lt;/a&gt;) sharing Cordova projects within a team is unpleasant. Cordova projects include generated artifacts and binary files in their source tree which violates source code management (SCM) best practices.&lt;br /&gt;
&lt;br /&gt;
The first set of generated files are on the &lt;i&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;{$PROJECT_ROOT}/platforms &lt;/span&gt;&lt;/i&gt;directory. When using Cordova CLI when a &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;cordova platform add {$PLATFORM}&lt;/span&gt; command is issued on a project, a&amp;nbsp;&lt;i&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;{PROJECT_ROOT}/platforms/{$PLATFORM}&lt;/span&gt;&lt;/i&gt; directory is generated. This directory contains all your artifacts from &lt;i&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;{$PROJECT_ROOT}/www,&lt;/span&gt;&lt;/i&gt;&amp;nbsp;&lt;i&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;{$PROJECT_ROOT}/merges/{$PLATFORM}&lt;/span&gt; &lt;/i&gt;directories and all the files necessary to create a native application with the platform build tools. Fortunately, Eclipse Thym generates platform folders on a temporary location and only when needed, hence does not share this problem. When using SCM tools,&amp;nbsp;&lt;i&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;{$PROJECT_ROOT}/platforms&lt;/span&gt; &lt;/i&gt;should &lt;b&gt;not&lt;/b&gt; be added to source management. For long term sanity, developers should do the extra step when they get the code from SCM and issue &amp;nbsp;&quot;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;platform add&lt;/span&gt;&quot; commands for the platforms that they will work on.&lt;br /&gt;
&lt;br /&gt;
The &lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;{$PLATFORM_ROOT}/plugins&lt;/i&gt;&lt;/span&gt; folder includes the files for Cordova plugins installed to the project. These files are not usually modified by the developers but installed with the&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt; cordova plugin add {$PLUGIN_ID}&lt;/span&gt; command. This command creates a &lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;{$PLATFORM_ROOT}/plugins/{$PLUGIN_ID}&lt;/i&gt;&lt;/span&gt; directory and copies the plugin&#39;s files in. Eclipse Thym also does a similar thing but it uses a filter on the project explorer so that the files do not confuse developers. Since these files can be regenerated and are not modified during daily development, it is a bad practice to add them to the SCM tools. Because both Cordova CLI and Eclipse Thym did not have a record of installed plugins other than the directories under &lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;{$PLATFORM_ROOT}/plugins/&lt;/i&gt;&lt;/span&gt; directory, it was not possible to avoid adding them to SCM.&lt;br /&gt;
&lt;br /&gt;
Recently, I have added a couple of new commands to Cordova CLI. &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;cordova save plugins &lt;/span&gt;saves the list of currently installed plugins to &lt;i&gt;config.xml&lt;/i&gt;.&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt; cordova restore plugins &lt;/span&gt;reads these entries from &lt;i&gt;config.xml&lt;/i&gt; and restores them to the project. The save command also comes with a&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt; --shrinkwrap&lt;/span&gt; flag to freeze to the installed versions of the plugins. Of course, Eclipse Thym also implements this feature. Here is a demo that shows the feature at work.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.youtube.com/embed/E0YdJNdnOYk?feature=player_embedded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
With the new save and restore commands and its implementation on Eclipse Thym, it is considerably easier to share Cordova projects but we are not done yet. At this time, restore and save commands support restoring plugins only from Cordova plugin registry but support for more sources should be expected in the future. It is also planned to extend these commands to platforms.&lt;br /&gt;
&lt;br /&gt;
UPDATE: The commands and the functionality has evolved since the original post. Please refer to &lt;a href=&quot;http://cordova.apache.org/docs/en/latest/platform_plugin_versioning_ref/index.html&quot; target=&quot;_blank&quot;&gt;Cordova platform and plugin version managemen&lt;/a&gt;t guide for the latest.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/789507603256260846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/789507603256260846'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2014/06/sharing-cordova-projects-becomes-easier.html' title='Sharing Cordova projects becomes easier'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-5859157382498413329</id><published>2014-03-31T22:19:00.000-04:00</published><updated>2014-03-31T22:19:03.289-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="eclipsecon"/><category scheme="http://www.blogger.com/atom/ns#" term="thym"/><title type='text'>Eclipse is changing and that is a good thing</title><content type='html'>After missing a few years, I have attended the &lt;a href=&quot;https://www.eclipsecon.org/na2014/&quot;&gt;EclipseCon NA 2014&lt;/a&gt;&amp;nbsp;this year. &amp;nbsp;I am not sure if it is because I missed a few of these but I felt a deep change in Eclipse. I think the change roots from the fact that Eclipse foundation nowadays, has almost no restrictions on the type of projects that it hosts. I am not sure when this was actually relaxed. Back in the day, it was required that all Eclipse projects to use OSGi as runtime, hence be developed with Java. Nowadays, any project regardless of the runtime, development language is welcomed as long as it agrees to adhere to &lt;a href=&quot;http://www.eclipse.org/projects/dev_process/development_process.php&quot;&gt;eclipse way&lt;/a&gt;. I believe this has triggered a slow shift on Eclipse from being a tooling community to a larger scoped open source community. I expect to see this change to accelerate in coming years as Eclipse&#39;s perception as a tooling only community slowly fades.&lt;br /&gt;
&lt;br /&gt;
Looking at the interest and attendance from project committers, I am sad to report that &lt;a href=&quot;http://www.eclipse.org/webtools/&quot;&gt;Eclipse WTP&lt;/a&gt; project is terminal. There are a couple of reasons why an important project such as WTP is not dead yet. First, it has a large user community as indicated by &lt;a href=&quot;http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/keplersr2&quot;&gt;download&lt;/a&gt; numbers. Also, it has a lot of commercial, and open source products that depend on WTP or parts of WTP. One would imagine that this dependency would create a lot of contributions to upstream. However, most of these products, for one reason or another, prefer to build around WTP and not contribute. I do not think we will be seeing new features on WTP anytime soon if ever.&lt;br /&gt;
&lt;br /&gt;
I did receive a good amount of attention to my Hybrid Mobile development &lt;a href=&quot;http://www.gorkem-ercan.com/2014/03/talking-about-cordova-tooling-and-thym.html&quot;&gt;talk&lt;/a&gt; and the new Thym project &lt;a href=&quot;https://projects.eclipse.org/proposals/thym&quot;&gt;proposal&lt;/a&gt;. I have started listing some of the interested parties to the proposal. And also was able to recruit &lt;a href=&quot;https://twitter.com/dougschaefer&quot;&gt;Doug Schaefer &lt;/a&gt;and &lt;a href=&quot;https://twitter.com/cra&quot;&gt;Chris Aniszczyk&lt;/a&gt; as mentors to the project. If you would like to be listed as an interested party and show your support, it is not late, please do let me know.&lt;br /&gt;
&lt;br /&gt;
I am continuing my great open source community conferences tour with &lt;a href=&quot;http://events.linuxfoundation.org/events/apachecon-north-america&quot;&gt;ApacheCon&lt;/a&gt;. It will be my first one, so I am not sure about what to expect. I will be speaking about building &lt;a href=&quot;http://sched.co/1bsMFZO&quot;&gt;Cordova applications with Eclipse&lt;/a&gt; IDE on Tuesday. April 8, which should be fun.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/5859157382498413329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/5859157382498413329'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2014/04/eclipse-is-changing-and-that-is-good.html' title='Eclipse is changing and that is a good thing'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-5771702798613975991</id><published>2014-03-12T00:55:00.000-04:00</published><updated>2014-03-12T00:55:29.294-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cordova"/><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="eclipsecon"/><title type='text'>Talking About Cordova Tooling and Thym Project Proposal</title><content type='html'>This spring turning out to be the season for conference sessions for me. I will be speaking about the new Hybrid (ehh... well Cordova) development tools on three different conferences.&amp;nbsp;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The series starts with EclipseCon next week. My &quot;&lt;a href=&quot;https://www.eclipsecon.org/na2014/session/hybrid-mobile-development-tools-eclipse&quot;&gt;Hybrid Mobile Development Tools for Eclipse&lt;/a&gt;&quot; session will be on Tuesday, March 18, 2014 between 13:30-14:05.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Also, we had a recent&amp;nbsp;&lt;a href=&quot;https://projects.eclipse.org/proposals/thym&quot;&gt;proposal&lt;/a&gt; to move the development of most of the JBoss Hybrid Mobile tools to Eclipse. This will give me a chance to discuss anyone who is interested on Hybrid Mobile tooling for Eclipse and get the project going possibly faster. If you are attending and would like to discuss please let me know or just find me at the conference.&amp;nbsp;&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/5771702798613975991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/5771702798613975991'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2014/03/talking-about-cordova-tooling-and-thym.html' title='Talking About Cordova Tooling and Thym Project Proposal'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-6933053794633152992</id><published>2014-01-09T13:16:00.000-05:00</published><updated>2014-01-09T13:16:29.765-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aerogear"/><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="cordova"/><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="iOS"/><category scheme="http://www.blogger.com/atom/ns#" term="JBoss"/><category scheme="http://www.blogger.com/atom/ns#" term="mobile"/><category scheme="http://www.blogger.com/atom/ns#" term="phonegap"/><title type='text'>Multiple Cordova Engines on JBoss Hybrid Mobile Tools</title><content type='html'>Until this week, &amp;nbsp;JBoss Hybrid Mobile Tools were able to work with a single Cordova version. To add insult to injury that single version (which is Cordova 3.1.0) was embedded in and was not changeable. However, Santa was busy and just dropped an initial implementation of multiple Cordova engine support to nightly builds. Below is a video of it in action. If you are cool enough to get the nightlies, instructions are on the&lt;a href=&quot;https://github.com/jbosstools/jbosstools-aerogear&quot;&gt; project&#39;s site&amp;nbsp;&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;object width=&quot;320&quot; height=&quot;266&quot; class=&quot;BLOGGER-youtube-video&quot; classid=&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0&quot; data-thumbnail-src=&quot;https://ytimg.googleusercontent.com/vi/GOfXAKXd_60/0.jpg&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;https://www.youtube.com/v/GOfXAKXd_60?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata&quot; /&gt;&lt;param name=&quot;bgcolor&quot; value=&quot;#FFFFFF&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;&lt;embed width=&quot;320&quot; height=&quot;266&quot;  src=&quot;https://www.youtube.com/v/GOfXAKXd_60?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
A word of caution is needed though. This feature is still &lt;u&gt;under development&lt;/u&gt;. If you really really need to use a different cordova version it will do the trick but for anything else I would wait for the release before moving my production code. Please do try the feature and provide feedback either on the &lt;a href=&quot;https://issues.jboss.org/browse/JBIDE-14407&quot;&gt;related issue &lt;/a&gt;&amp;nbsp;or create new ones.&amp;nbsp;&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/6933053794633152992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/6933053794633152992'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2014/01/multiple-cordova-engines-on-jboss.html' title='Multiple Cordova Engines on JBoss Hybrid Mobile Tools'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-535467248180139402</id><published>2013-12-12T22:42:00.000-05:00</published><updated>2013-12-12T22:45:38.344-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aerogear"/><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="cordova"/><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="iOS"/><category scheme="http://www.blogger.com/atom/ns#" term="JBoss"/><category scheme="http://www.blogger.com/atom/ns#" term="mobile"/><category scheme="http://www.blogger.com/atom/ns#" term="phonegap"/><title type='text'>Not even a year</title><content type='html'>Within the past 12 months, I had a baby boy, moved to a new country, changed my job and developed a set of Eclipse plug-ins for developing &lt;a href=&quot;http://cordova.apache.org/&quot; target=&quot;_blank&quot;&gt;Cordova&lt;/a&gt; applications.&lt;br /&gt;
&lt;br /&gt;
The Hybrid Mobile development tools, as I called it, is about to be released as part of the JBoss Tools 4.1.1 release. Below is a video overview of the main feature set that is available in this release. &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;640&#39; height=&#39;390&#39; src=&#39;https://www.youtube.com/embed/hbZ-wZCJ7Xs?feature=player_embedded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
We have a good set of features implemented but we are not done yet. Please do use the tools and provide your &lt;a href=&quot;https://issues.jboss.org/browse/JBIDE/component/12317246&quot;&gt;feedback&lt;/a&gt; on the current feature set and future ones. If you feel like making some changes you can fork the &lt;a href=&quot;https://github.com/jbosstools/jbosstools-aerogear&quot;&gt;project on github&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
In the mean time, we have started to explore if &lt;a href=&quot;http://www.eclipse.org/&quot;&gt;Eclipse Foundation&lt;/a&gt; would be a good place to further expand the development of the project. I am also interested to hear thoughts on that as well.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/535467248180139402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/535467248180139402'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2013/12/not-even-year.html' title='Not even a year'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-2143421433308745849</id><published>2013-07-29T14:00:00.001-04:00</published><updated>2013-10-17T11:00:24.053-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aerogear"/><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="cordova"/><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="iOS"/><category scheme="http://www.blogger.com/atom/ns#" term="JBoss"/><category scheme="http://www.blogger.com/atom/ns#" term="mobile"/><category scheme="http://www.blogger.com/atom/ns#" term="phonegap"/><title type='text'>Exporting on JBoss Hybrid Mobile Tools</title><content type='html'>&lt;a href=&quot;http://www.gorkem-ercan.com/2013/05/hybrid-mobile-application-development.html&quot;&gt;Work&lt;/a&gt; that I have been doing on tools around &lt;a href=&quot;http://cordova.apache.org/&quot;&gt;Apache Cordova&lt;/a&gt; is continuing its progress. I have been aware that we were not doing such a great job with exporting stuff out of our new project type, &lt;i&gt;Native Hybrid&lt;/i&gt; projects. So I have been working to build a couple of new export wizards to fix this problem. Overall the development of the wizards have taken a longer time then usual because I decided to introduce extension points to accommodate easier integration of platforms in addition to currently supported iOS and Android. More on the extension points later as it deserves a post of its own.&lt;br /&gt;
&lt;br /&gt;
The first of the wizards allows developers to export &lt;i&gt;Native Platform Projects&lt;/i&gt;. Basically it generates a native project with all the bits from Apache Cordova for that platform that you can open/build/run via the platform&#39;s tools. For example, on iOS the exported project is an XCode project that can be build/run using XCode. Here is a screencast that shows export Native Platform Project wizard in action.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.youtube.com/embed/SJ7fw4haNvs?feature=player_embedded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
The second wizard is &lt;i&gt;Mobile Application Export &lt;/i&gt;wizard. It helps you to export a native platform binary that is&amp;nbsp;build for release. Depending on the platform, you can run this binary on a real device directly or after signing. At this time, we do not sign the binaries, but I do &lt;a href=&quot;https://issues.jboss.org/browse/JBIDE-15300&quot;&gt;wish&lt;/a&gt; to support it in the future. I think this will be a critical feature if/when we support remote compilers.&lt;br /&gt;
&lt;br /&gt;
We are moving as (reasonably) fast as possible to add new features to the project so project is actually on that exciting stage to contribute. If you are interested, it is hosted on &lt;a href=&quot;https://github.com/jbosstools/jbosstools-aerogear&quot;&gt;github&lt;/a&gt;&amp;nbsp;and your pull requests are always welcome. If you feel the need to contact me, you can use the&lt;a href=&quot;https://lists.jboss.org/mailman/listinfo/jbosstools-dev&quot;&gt; JBoss tools mailing &lt;/a&gt;list or the #aerogear or #jbosstools irc channels on freenode.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/2143421433308745849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/2143421433308745849'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2013/07/exporting-on-jboss-hybrid-mobile-tools.html' title='Exporting on JBoss Hybrid Mobile Tools'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-6895506107446843915</id><published>2012-06-26T09:30:00.000-04:00</published><updated>2012-06-26T09:30:57.430-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="evangelism"/><category scheme="http://www.blogger.com/atom/ns#" term="MTJ"/><category scheme="http://www.blogger.com/atom/ns#" term="Series 40"/><title type='text'>A new IDE based on Eclipse MTJ</title><content type='html'>&lt;br /&gt;
&lt;div lang=&quot;tr&quot; style=&quot;font-family: Calibri; font-size: 11.0pt; margin: 0in;&quot;&gt;
Nokia
released a new version of the Nokia SDK for Java. In additon to supporting &lt;a href=&quot;http://www.developer.nokia.com/search/search.xhtml?view=ds&amp;amp;k=&amp;amp;ob=pubdate&amp;amp;p1=fn%3Atype&amp;amp;c1=must&amp;amp;o1=EQ&amp;amp;v1=fnType%3ATerminal&amp;amp;p3=dp%3Adeveloper_platform&amp;amp;c3=must&amp;amp;o3=EQ&amp;amp;v3=dpDeveloperPlatform%3As40_2_0&quot; target=&quot;_blank&quot;&gt;AshaTouch devices &lt;/a&gt;(devices with touch only input for you and me ), it includes a
new IDE.&amp;nbsp; This new IDE is based on
&lt;a href=&quot;http://www.eclipse.org/mtj/&quot;&gt;Eclipse MTJ&lt;/a&gt;. For those who remember, it also integrates to SDK discovery
features of the now discontinued &lt;a href=&quot;http://www.eclipse.org/pulsar/&quot;&gt;Pulsar&lt;/a&gt; distribution of Eclipse.&lt;/div&gt;
&lt;div lang=&quot;tr&quot; style=&quot;font-family: Calibri; font-size: 11.0pt; margin: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang=&quot;tr&quot; style=&quot;font-family: Calibri; font-size: 11.0pt; margin: 0in;&quot;&gt;
The main
focus on this version of the IDE was to make it easier for newbies to Nokia
platforms to discover and install the necessary tools and get started. On the
discovery part IDE does a good job. As you can see from the screenshot it
provides an extensive array of filters to find the right SDK for your project.&lt;/div&gt;
&lt;div lang=&quot;tr&quot; style=&quot;font-family: Calibri; font-size: 11.0pt; margin: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang=&quot;tr&quot; style=&quot;font-family: Calibri; font-size: 11.0pt; margin: 0in;&quot;&gt;
You should expect to see more features coming to the IDE and some of them will also appear on MTJ.&lt;/div&gt;
&lt;div lang=&quot;tr&quot; style=&quot;font-family: Calibri; font-size: 11.0pt; margin: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://3.bp.blogspot.com/-N2T7qSEGxsA/T-m3MEAYMCI/AAAAAAAABiE/_MCTX8Zzbek/s1600/deviceManager.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;http://3.bp.blogspot.com/-N2T7qSEGxsA/T-m3MEAYMCI/AAAAAAAABiE/_MCTX8Zzbek/s400/deviceManager.png&quot; width=&quot;310&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div lang=&quot;tr&quot; style=&quot;font-family: Calibri; font-size: 11.0pt; margin: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang=&quot;tr&quot; style=&quot;font-family: Calibri; font-size: 11.0pt; margin: 0in;&quot;&gt;
Besides the
fact that I am the project lead for the Eclipse MTJ, this IDE makes me happy
for an additional reason. I believe this is a product of my internal evangelism that has taken years to build up. For those of you who have
not worked for the large companies (lucky you) this may sound strange.&amp;nbsp; But large corporations are like a community of their own and you basically spend more time advocating to your company
than&amp;nbsp;outside your company.&lt;/div&gt;
&lt;div lang=&quot;tr&quot; style=&quot;font-family: Calibri; font-size: 11.0pt; margin: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div lang=&quot;tr&quot; style=&quot;font-family: Calibri; font-size: 11.0pt; margin: 0in;&quot;&gt;
In this
case, I had a positive result but &lt;b&gt;in evangelism you encounter more frustrations
than victories&lt;/b&gt;.&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/6895506107446843915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/6895506107446843915'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2012/06/new-ide-based-on-eclipse-mtj.html' title='A new IDE based on Eclipse MTJ'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-N2T7qSEGxsA/T-m3MEAYMCI/AAAAAAAABiE/_MCTX8Zzbek/s72-c/deviceManager.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-4656788816250377994</id><published>2011-03-09T08:35:00.000-05:00</published><updated>2011-03-09T08:35:30.548-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="MTJ"/><title type='text'>MTJ release 1.1.2 is available</title><content type='html'>&lt;div style=&quot;text-align: left;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://www.eclipse.org/mtj&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;172&quot; src=&quot;https://lh4.googleusercontent.com/-nqZPJN7NkGw/TXeBStVuEYI/AAAAAAAABZw/YmmVbXkXpdQ/s320/n8_helios.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Together with the rest of the &lt;a href=&quot;http://www.eclipse.org/downloads/packages/release/helios/sr2&quot;&gt;Eclipse Helios SR2&lt;/a&gt; release, MTJ project has also made its 1.1.2 release available. Unlike most Eclipse projects MTJ project introduces new features on SR releases as well. You can find the information on the new features in the &lt;a href=&quot;http://www.eclipse.org/mtj/development/releasenotes/MTJ1.1.x/newsNoteworthy.php#1.1.2&quot;&gt;new &amp;amp; noteworthy&lt;/a&gt; page. Equally important to the features is the &lt;a href=&quot;https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced;target_milestone=1.1.2;product=MTJ;classification=Tools&quot;&gt;list&lt;/a&gt; of the bugs that were fixed in this release.&lt;br /&gt;
&lt;br /&gt;
Please note that MTJ project recently had a project move. As part of the move, the URL for its web site has been changed to &lt;a href=&quot;http://www.eclipse.org/mtj&quot;&gt;http://www.eclipse.org/mtj&lt;/a&gt;&amp;nbsp;the changes have also affected the update sites and the download sites and the &lt;i&gt;/dsdp/ &lt;/i&gt;has been removed from them. Project team has updated the website and all the references that we are aware of, however if you notice that some link has been missed and is still pointing to the old URLs please &lt;a href=&quot;https://bugs.eclipse.org/bugs/enter_bug.cgi?product=MTJ&quot;&gt;report&lt;/a&gt; them.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/4656788816250377994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/4656788816250377994'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2011/03/mtj-release-112-is-available.html' title='MTJ release 1.1.2 is available'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh4.googleusercontent.com/-nqZPJN7NkGw/TXeBStVuEYI/AAAAAAAABZw/YmmVbXkXpdQ/s72-c/n8_helios.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-1096793519388008087</id><published>2010-10-21T18:17:00.003-04:00</published><updated>2010-10-22T10:24:46.232-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="eSWT"/><category scheme="http://www.blogger.com/atom/ns#" term="Nokia"/><category scheme="http://www.blogger.com/atom/ns#" term="Qt"/><title type='text'>My boss asked me to use Orbit UI and I said No</title><content type='html'>&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;You may have heard the &lt;a href=&quot;http://conversations.nokia.com/2010/10/21/nokia-focuses-on-qt-to-extend-reach-for-developers-make-mobile-experience-richer-for-users/&quot;&gt;announcements&lt;/a&gt; from Nokia that &quot;Nokia Focuses on &lt;a href=&quot;http://qt.nokia.com/&quot;&gt;Qt&lt;/a&gt; to Extend Reach for Developers&quot;. This sentence actually does not make sense to those who are not familiar with the matter. Why should it? One would assume that Nokia, which acquired Trolltech -the maker of Qt- and became the maker of Qt, would be using Qt for all its internal and external development needs. Well, one would be wrong.&lt;br /&gt;
&lt;br /&gt;
At the time, when Nokia acquired Qt, Nokia was in immediate need for a good looking, finger touch enabled UI toolkit with a complete API set. There were already efforts within Symbian organization to create a solution. This effort was fairly resourced and did have limited success. However, this solution did not really provide the ease of development, or a complete API set and we all know that getting those right requires a lot of work. As a result, Nokia did the best acquisitions of its history.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;When Qt arrived to Symbian, it did not have a look and feel suitable for mobile. It was using its default windows style and on a phone that actually looked horrible. This alerted the people who are responsible of the welfare of the Symbian&#39;s UIs. Since the former employees of the Trolltech were still probies on Nokia, they turned to the only people they knew for a solution. More or less the same group of people that tried to provide the earlier solution started to build a UI toolkit using mainly the basic graphics capabilities of Qt. The resulting work was later named Orbit UI.&lt;br /&gt;
&lt;br /&gt;
Orbit was so dominant on Symbian organization that Orbit was synonymous to Qt. I recall explaining over and over to people the difference between Orbit and Qt back then. It was actually around those days when my boss.probably affected by the propaganda and the amount of resources put behind Orbit, asked if we should start using Orbit to implement Java UIs instead of Qt. My reply was, &quot;No, we are better of with Qt&quot;.&lt;br /&gt;
I have steered away from Orbit for several reasons, its cross-platform story was unclear, Orbit development team did not have a history of making good APIs, it was missing functionality that was important to implement eSWT. More important from all these. Orbit was the result of human factors and did not provide a superior solution to a technical problem. Hence, It is not amusing that Orbit UI and its sister MeeGo touch (which also has a similar story) now vanishes and Qt and the new &lt;a href=&quot;http://qt.nokia.com/products/qt-quick&quot;&gt;Qt Quick &lt;/a&gt;becomes the main developer focus for Nokia&#39;s internal and external developers. Now, Nokia&#39;s developer story becomes one that I can trust to have the eSWT implementation on.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update: &lt;/b&gt;The good folks on Forum Nokia has informed me about MeeGo touch. Appearently, MeeGo touch is not going away&amp;nbsp;immediately&amp;nbsp;in Harmattan, however it is not the recommended UI toolkit.&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/1096793519388008087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/1096793519388008087'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2010/10/my-boss-asked-me-to-use-orbit-ui-and-i.html' title='My boss asked me to use Orbit UI and I said No'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-6008166759836129983</id><published>2010-09-27T08:58:00.000-04:00</published><updated>2010-09-27T08:58:36.545-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="MTJ"/><category scheme="http://www.blogger.com/atom/ns#" term="Pulsar"/><title type='text'>New MTJ release available</title><content type='html'>&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;Slowly but surely Eclipse Mobile Tools for Java (&lt;a href=&quot;http://www.eclipse.org/dsdp/mtj/&quot;&gt;MTJ&lt;/a&gt;) project continues to improve. In coordination with the Eclipse Helios SR1 release, we had the MTJ 1.1.1 release. &lt;br /&gt;
&lt;br /&gt;
If you have received MTJ through &lt;a href=&quot;http://www.eclipse.org/pulsar/&quot;&gt;Pulsar&lt;/a&gt; package, you can receive your update for the new release from within Eclipse using &lt;em&gt;Help-&amp;gt;Check for Updates.&lt;/em&gt; Pulsar SR1 release can be installed from &lt;a href=&quot;http://www.eclipse.org/downloads/packages/pulsar-mobile-developers/heliossr1&quot;&gt;here&lt;/a&gt;. MTJ 1.1.1 is also available as a separate &lt;a href=&quot;http://download.eclipse.org/dsdp/mtj/downloads/drops/S-1.1.1RC1-201009031435/index.html&quot;&gt;download&lt;/a&gt; and &lt;a href=&quot;http://download.eclipse.org/dsdp/mtj/updates/1.1.1/stable&quot;&gt;update&lt;/a&gt; site as well.&lt;br /&gt;
&lt;br /&gt;
This is a bug fix release, notably it fixes the bug &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=312045&quot;&gt;312045&lt;/a&gt; which was causing problems on the preverifier builder for some. Also improved is the Javadoc detection for most SDKs. The complete list of bugs fixed in the release is &lt;a href=&quot;https://bugs.eclipse.org/bugs/buglist.cgi?order=Importance;classification=DSDP;query_format=advanced;component=Core;component=Deployment;component=Docs;component=General;component=MTJ%20projects;component=Project%20Builder;component=Pulsar;component=releng;component=SDK%20Management;component=Security%20Management;component=Signing;component=UI;component=Web%20Site;product=MTJ;target_milestone=1.1.1&quot;&gt;here&lt;/a&gt;, and the &lt;a href=&quot;http://www.eclipse.org/dsdp/mtj/development/releasenotes/MTJ1.1.x/newsNoteworthy.php&quot;&gt;new &amp;amp; noteworthy&lt;/a&gt; has some details on the SDK detection. I am&amp;nbsp;particularly&amp;nbsp;happy about the improvement this feature brings to MTJs use with the Nokia Symbian SDKs.&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/6008166759836129983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/6008166759836129983'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2010/09/new-mtj-release-available.html' title='New MTJ release available'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-8136871656111081048</id><published>2010-06-19T06:47:00.000-04:00</published><updated>2010-06-19T06:47:41.171-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="MTJ"/><category scheme="http://www.blogger.com/atom/ns#" term="Pulsar"/><title type='text'>A Numberic Retrospective of Pulsar Galielo release</title><content type='html'>&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;Now that Eclipse &lt;a href=&quot;http://www.eclipse.org/helios/&quot;&gt;Helios&lt;/a&gt; is just around the corner, and the hectic days of getting the release ready is over, I thought this would be a good time to look back at what was achieved on the very first &lt;a href=&quot;http://www.eclipse.org/pulsar/&quot;&gt;Pulsar&lt;/a&gt; release. Predictably, I took a moment to harvest the download statistics of the Eclipse Pulsar &lt;a href=&quot;http://www.eclipse.org/galileo/&quot;&gt;Galielo&lt;/a&gt; &lt;a href=&quot;http://wiki.eclipse.org/Simultaneous_Release&quot;&gt;simultaneous release&lt;/a&gt; to come up with some numbers that are easier to consume.&lt;br /&gt;
&lt;br /&gt;
If you are not familiar with the download statistics of Eclipse, these numbers represent the downloads that went through the Eclipse.org infrastructure. That means, if you have downloaded Pulsar directly from a mirror site without the mirror redirection from eclipse.org, your download is not counted in these numbers. Unfortunately, these numbers do not include the p2 installs and updates either, because Pulsar did not enable p2 download statistics on Galileo release. This is something we are fixing on Helios.&lt;br /&gt;
&lt;br /&gt;
Here is some notes about the Pulsar. Eclipse&#39;s mobile development packaging is called Pulsar. On Galielo release it provided mainly the tools for &lt;a href=&quot;http://en.wikipedia.org/wiki/Mobile%20Information%20Device%20Profile&quot; id=&quot;aptureLink_fGcNdvr2TE&quot;&gt;MIDP&lt;/a&gt; development. So it is safe to assume that these download numbers reflect mostly an audience of MIDP developers. &lt;a href=&quot;http://www.eclipse.org/dsdp/mtj/&quot;&gt;Eclipse Mobile Tools for Java (MTJ)&lt;/a&gt; is the project that produces the development tools for &lt;a href=&quot;http://en.wikipedia.org/wiki/Java%20Platform%2C%20Micro%20Edition&quot; id=&quot;aptureLink_890KzfCZLF&quot;&gt;JavaME&lt;/a&gt; development. Although the main distribution of MTJ is through Pulsar, MTJ also produces downloads that are independent from Pulsar. The downloads for MTJ’s direct downloads are not part of this report and the MTJ 1.0.1 release did receive an additional download of 18927 to date.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_ZT4L3ZsR7hE/TByR_Ju96-I/AAAAAAAABVI/rkOV30HRcQs/s1600/galileo.jpeg&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;http://1.bp.blogspot.com/_ZT4L3ZsR7hE/TByR_Ju96-I/AAAAAAAABVI/rkOV30HRcQs/s400/galileo.jpeg&quot; width=&quot;391&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp; &lt;br /&gt;
As you can see from the above numbers win32 is by far the most popular development platform for Pulsar. It is probably even more so than other Eclipse packages because the platforms supported by the mobile emulators are still limited. Also you will notice a drop on the number of downloads between SR1 and SR2 release. I guess, without any evidence, this is because many of the SR1 users updated through P2.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_ZT4L3ZsR7hE/TBySBt4loGI/AAAAAAAABVM/pQNHr9u4xVw/s1600/country&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;282&quot; src=&quot;http://1.bp.blogspot.com/_ZT4L3ZsR7hE/TBySBt4loGI/AAAAAAAABVM/pQNHr9u4xVw/s320/country&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;A look at the top 10 countries for the downloads reveals that a huge majority of the Pulsar users are from China. I was expecting to see China as the top country but the gap between China and other countries really surprised me.&lt;br /&gt;
&lt;br /&gt;
The overall numbers indicate that despite all the excitement around the Android, iPhone application development, MIDP still has one of the largest mobile developer community on earth. &lt;br /&gt;
&lt;br /&gt;
Pulsar&#39;s&amp;nbsp; first year reach performance seems to be quite satisfactory. I expect a slightly better reach with the Helios release because Pulsar is better known by developers this year. I do not expect a big jump though because Pulsar does not yet provide a well integrated solution for mobile development other than MIDP.&lt;br /&gt;
&lt;br /&gt;
&lt;div align=&quot;center&quot;&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/8136871656111081048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/8136871656111081048'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2010/06/numberic-retrospective-of-pulsar.html' title='A Numberic Retrospective of Pulsar Galielo release'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_ZT4L3ZsR7hE/TByR_Ju96-I/AAAAAAAABVI/rkOV30HRcQs/s72-c/galileo.jpeg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-8123522354923106323</id><published>2010-05-28T06:50:00.000-04:00</published><updated>2010-05-28T06:50:48.549-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="JSR-232"/><category scheme="http://www.blogger.com/atom/ns#" term="OSGi"/><title type='text'>No OSGi on your phone</title><content type='html'>&lt;a href=&quot;http://www.osgi.org/&quot;&gt;OSGi&lt;/a&gt; was initially created for mobile and embedded world. I think it is the dream of an every OSGi geek dream to develop applications. for a cool OSGi engine that is bolted together with the operating system of your phone. An OSGi phone that would provide access to everything your phone can do together with all the goodness that comes from OSGi. A dream phone that would allow you to bring in your OSGi service that integrates with your cloud service, over the air when declared as dependency. Although, OSGI had a few attempts to really break into mobile phone world it is unfortunate that OSGi phone will remain a dreams for foreseeable future.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/_ZT4L3ZsR7hE/S_-dyYVKKyI/AAAAAAAABU8/RMrAMFH71h8/s1600/symbian_logo.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/_ZT4L3ZsR7hE/S_-dyYVKKyI/AAAAAAAABU8/RMrAMFH71h8/s1600/symbian_logo.png&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.nokia.com/&quot; target=&quot;_blank&quot;&gt;Nokia&lt;/a&gt; did work on an OSGi based Java environment for &lt;a href=&quot;http://www.symbian.org/&quot;&gt;Symbian&lt;/a&gt; phones. Nokia even went to the trouble to create a &lt;a href=&quot;http://jcp.org/en/jsr/detail?id=232&quot;&gt;JSR&lt;/a&gt; for it. It established a pretty ambitious R&amp;amp;D program around OSGi. It was actually these ambitious goals that eventually caused it to fail. The R&amp;amp;D program was ambitious because it not only promised to provide OSGi but it also tried to get &lt;a href=&quot;http://en.wikipedia.org/wiki/MIDlet&quot;&gt;Midlets&lt;/a&gt; to work together with the OSGi engine. However, OSGi aware midlets model especially the MIDP security did not fit to OSGi and the R&amp;amp;D effort was never able to deliver a solution that was acceptable. In my personal opinion the main flaw was on the effort was treating OSGi as another runtime on the device rather than the main engine.&lt;br /&gt;
&lt;br /&gt;
Most of the effort did not get wasted on Nokia&#39;s effort though. On the older MIDP environment all the pieces of the Java environment (all JSR implementation etc..) was compiled into a single binary together with the VM and was loaded together with it. OSGi model required a flexible architecture so almost all the pieces of the Java environment was re-designed for it so that they would be separate libraries consisting of a jar and possibly a native dll. These pieces are compiled separately and are loaded on demand by VM. This architecture later converted into MIDP environment as well. The Java environment of S60 3.2 and later devices and the Java environment currently available as part of the Open source Symbian foundation code carries this architecture. A few advanced APIs such as eSWT was also created in this era.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/_ZT4L3ZsR7hE/SSKkSjAlPLI/AAAAAAAAA2Y/4O8-8wn5XPg/s1600/logo_android%5B7%5D&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/_ZT4L3ZsR7hE/SSKkSjAlPLI/AAAAAAAAA2Y/4O8-8wn5XPg/s1600/logo_android%5B7%5D&quot; /&gt;&lt;/a&gt;A second opportunity was when Google started working on Android. The goals of the Android was almost a perfect match with OSGi. And this time OSGi would be the engine that runs all the services and applications of the phone which lacked on the earlier Nokia attempt. It is also known that there were members of the Android team who did know well about OSGi. It is hard to know as an outsider what really went but Android did not use OSGi and build its own version of concepts to provide similar functionality.&lt;br /&gt;
&lt;br /&gt;
Although there were later attempts like the &lt;a href=&quot;http://developer.sprint.com/&quot;&gt;Sprint&lt;/a&gt; Titan platform to bring OSGi to mobile phones, they also failed when the smartphone market changed rapidly to different directions. Unfortunately, in the current climate it looks very unlikely that anyone will bother to spend the time and energy to make OSGi part of mobile phones.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/8123522354923106323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/8123522354923106323'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2010/05/no-osgi-on-your-phone.html' title='No OSGi on your phone'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_ZT4L3ZsR7hE/S_-dyYVKKyI/AAAAAAAABU8/RMrAMFH71h8/s72-c/symbian_logo.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-2599539914697747564</id><published>2010-05-03T06:37:00.000-04:00</published><updated>2010-05-03T06:37:55.514-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><title type='text'>Changes on this blog&#39;s Planet Eclipse participation</title><content type='html'>If you have been following this blog through &lt;a href=&quot;http://planet.eclipse.org/planet/&quot;&gt;Planet Eclipse&lt;/a&gt;, you should be aware that the full content of this blog will no longer be available on Planet Eclipse. This blog started its life with the intention to provide information and updates around the Eclipse projects I am involved with and grew from there. Lately, the developments on technologies that I am working with and interested in are more frequently outside the scope of Eclipse. Since I want to blog about mobile and web software technology happening outside Eclipse and out of respect to the Planet Eclipse readers, I am replacing my feed on Planet Eclipse with one that carries only posts labeled for Eclipse. If you are a Planet Eclipse reader but still would like to read all the posts, you can subscribe to the &lt;a href=&quot;http://feeds.feedburner.com/Developing&quot;&gt;full feed&lt;/a&gt;.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/2599539914697747564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/2599539914697747564'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2010/05/changes-on-this-blogs-planet-eclipse.html' title='Changes on this blog&#39;s Planet Eclipse participation'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-6914184935357605653</id><published>2010-04-19T08:33:00.000-04:00</published><updated>2010-04-19T08:33:42.156-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="eSWT"/><category scheme="http://www.blogger.com/atom/ns#" term="LCDUI"/><category scheme="http://www.blogger.com/atom/ns#" term="Qt"/><title type='text'>Threading on Symbian eSWT</title><content type='html'>&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;eSWT, just like SWT, implements a single threaded UI model (single-threaded apartment model). And just like SWT it provides access to UI functions from this thread only. This does not mean that you can have only a single thread on eSWT/SWT applications it means that the GUI interaction is exclusive to a designated thread. You can read more about SWT threading model in &lt;a href=&quot;http://www.eclipse.org/swt/faq.php#uithread&quot; target=&quot;_blank&quot; title=&quot;SWT FAQ&quot;&gt;SWT FAQ&lt;/a&gt;. In this post, I will compare the implementation details of this model on eSWT port for Symbian and the new Qt port.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Avkon&quot;&gt;Avkon UI&lt;/a&gt;, that is used to implement the S60 port of eSWT, also have similar restrictions on threads. So one would think that eSWT S60 port just wraps the native Symbian UI thread since we have matching behavior. However, this is not the case with the S60 eSWT port. eSWT on Symbian actually creates two threads. Thread one runs the Symbian&#39;s UI environment which within the team we refer as the &lt;i&gt;native UI thread&lt;/i&gt;. Thread two runs the eSWT&#39;s UI thread which is referred as &lt;i&gt;main thread&lt;/i&gt;. Although, from an eSWT developer perspective, &lt;i&gt;main thread&lt;/i&gt; is eSWT&#39;s UI thread but it actually has nothing to do with the native UI resources. The implementation of LCDUI on the same platform also has a similar architecture. LCDUI is specified to be a thread-safe API so in LCDUI&#39;s case the second thread (that hides the native UI thread) is more or less a necessity where eSWT&#39;s second thread is a design decision.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_ZT4L3ZsR7hE/S8wnL669-AI/AAAAAAAABRk/hMccJWTuOxQ/s1600/ThreadModels.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;387&quot; src=&quot;http://3.bp.blogspot.com/_ZT4L3ZsR7hE/S8wnL669-AI/AAAAAAAABRk/hMccJWTuOxQ/s400/ThreadModels.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
This design, as with any design. comes with both positive and negative consequences. The main benefit of the two threaded solution is because the real UI is run by a thread that is not directly accessible for Java applications, it is not possible for a poorly developed application to freeze the UI and eventually get killed by the Symbian OS. However, this security comes with a performance penalty. A two thread design translates to a lot of thread switching and thread switching is costly. In theory, for every call that you make to UI components, even simple things such as setting the background color for a line makes a thread switch. In practice, however both eSWT and LCDUI tries to reduce the number of thread switches especially for primitive graphics drawing by introducing command buffers etc. in the implementation. eSWT buffers all GC calls that are possible to buffer during a paint event and passes them to the UI thread at the end of the event. LCDUI also does similar on paint callbacks.&lt;br /&gt;
&lt;br /&gt;
When the new implementation of eSWT port for Qt started, it was decided that the performance penalty was too much to dismiss for the gained robustness. So eSWT port on Qt is designed and implemented to have a single thread that wraps the Qt&#39;s UI thread. As a consequence of the simplified design, the implementation ended up to be identical to any other SWT port. In fact,it borrows much of the code from SWT win32 port. I see that this contributed a big deal to the maturity of the Qt port. In the earlier testing we have also noticed some performance gains. it is really unfortunate that LCDUI implementation is not able to take advantage of a similar architecture because the thread safe nature of LCDUI forces the implementation to use two threads.&lt;br /&gt;
&lt;br /&gt;
If you are an application developer using eSWT or LCDUI on Symbian platform this is probably some geeky extra information that you should not worry much about and the eSWT and LCDUI implementation will care about it for you. If you are interested in the actual implementation of the toolkit, you should keep this information at the corner of your mind.&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/6914184935357605653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/6914184935357605653'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2010/04/threading-on-symbian-eswt.html' title='Threading on Symbian eSWT'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_ZT4L3ZsR7hE/S8wnL669-AI/AAAAAAAABRk/hMccJWTuOxQ/s72-c/ThreadModels.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-4072955544621403483</id><published>2010-03-15T14:37:00.001-04:00</published><updated>2010-03-15T14:38:13.039-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="eSWT"/><category scheme="http://www.blogger.com/atom/ns#" term="image"/><category scheme="http://www.blogger.com/atom/ns#" term="SWT"/><title type='text'>Use ImageLoader with extra caution</title><content type='html'>&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;The &lt;a href=&quot;http://dsdp.eclipse.org/help/latest/topic/org.eclipse.ercp.doc.isv/html/reference/api/org/eclipse/swt/graphics/ImageLoader.html&quot;&gt;ImageLoader&lt;/a&gt; class of eSWT and SWT is a utility class for loading and saving images. At a first glance, it is a very useful little utility class. Unfortunately, it is one piece of SWT/eSWT API that gives the implementation teams a performance headache. SWT is a well performing API because it delegates most of the work to the native services. eSWT implementation also follows this legacy and because they are meant to run on more resource constraint environments they take it a step further.&lt;br /&gt;
&lt;br /&gt;
Unlike the rest of the SWT, the meat of the ImageLoader is actually implemented on Java, SWT packs Java implementations of all the image codecs that it supports. According to &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=53443&quot;&gt;some&lt;/a&gt;, Java implementation is around 20 times slower when loading an image compared to an image loaded by native means. For the best image loading performance, it is recommended to use one of the &lt;a href=&quot;http://dsdp.eclipse.org/help/latest/topic/org.eclipse.ercp.doc.isv/html/reference/api/org/eclipse/swt/graphics/Image.html&quot; target=&quot;_blank&quot;&gt;Image&lt;/a&gt; constructors, which loads the images natively. This advice holds true for eSWT applications as well. &lt;i&gt;Do not use the ImageLoader for loading images because it will not only be slower but will also consume more memory.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
So why do even the eSWT implementations fail to optimize ImageLoader? ImageLoader has a misleading name. In practice ImageLoader has nothing to do with Image it actually loads and saves &lt;a href=&quot;http://dsdp.eclipse.org/help/latest/topic/org.eclipse.ercp.doc.isv/html/reference/api/org/eclipse/swt/graphics/ImageData.html&quot; target=&quot;_blank&quot;&gt;ImageData&lt;/a&gt;. While doing that it exposes the ImageData it loads or saves on a public field. This gives no choice to the implementation but to make the whole data available up front. Furthermore, ImageData also exposes all its fields and that also has to be initialized fully when created. So what happens when on a typical scenario of loading and using an image through ImageLoader? First, the whole ImageData is loaded into these fields. This reading and encoding is done on Java and is slower. Then this data is passed to the native toolkit which also doubles the amount of memory used for that image at least until the ImageData is released. Using Image constructors works around both defects, image is loaded and encoded natively and the data is not copied to Java fields limiting the memory usage.&lt;br /&gt;
&lt;br /&gt;
One option for optimization is loading the ImageData through native code, but this actually triples the amount of memory used and copied around. The image data gets created first on the native code and then gets copied to Java and copied back to native to create the native image. As a result, this is not an option used by the SWT/eSWT implementations at least for now.&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/4072955544621403483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/4072955544621403483'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2010/03/use-imageloader-with-extra-caution.html' title='Use ImageLoader with extra caution'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-3830471219180671600</id><published>2009-09-09T08:05:00.001-04:00</published><updated>2009-09-09T08:05:22.103-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="eRCP"/><category scheme="http://www.blogger.com/atom/ns#" term="eSWT"/><category scheme="http://www.blogger.com/atom/ns#" term="Qt"/><title type='text'>Eclipse eRCP 1.3 on Linux Qt</title><content type='html'>&lt;p&gt;eRCP team have been working day and night with eSWT port for &lt;a href=&quot;http://www.qtsoftware.com/&quot; target=&quot;_blank&quot;&gt;Qt&lt;/a&gt;. We have resolved some of the immediate problems and integrated with the &lt;a href=&quot;http://www.eclipse.org/ercp&quot; target=&quot;_blank&quot;&gt;eRCP&lt;/a&gt; builds. An early access package for eRCP on Linux Qt now exists. You can download it form the usual eRCP &lt;a href=&quot;http://www.eclipse.org/ercp/downloads-page.html&quot; target=&quot;_blank&quot;&gt;downloads page&lt;/a&gt;. This is the very first attempt to create an eRCP package using our new Qt port, this means that it has problems. We want to fix them so please take time to &lt;a href=&quot;https://bugs.eclipse.org/bugs/enter_bug.cgi?product=ERCP&quot; target=&quot;_blank&quot;&gt;report them&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Also under discussion, is creating similar eRCP distributions wherever Qt is present. However, we need help. We are short on people who can help with the packaging, testing and fixing stuff for other platforms. If you think you can help please drop a line to &lt;a href=&quot;https://dev.eclipse.org/mailman/listinfo/ercp-dev&quot; target=&quot;_blank&quot;&gt;ercp-dev&lt;/a&gt; mailing list.&amp;#160; &lt;/p&gt;  &lt;p&gt;If eRCP is not your thing but you think that a Qt port for &lt;a href=&quot;http://www.eclipse.org/swt/&quot; target=&quot;_blank&quot;&gt;SWT&lt;/a&gt; would be great, that idea is still on the table looking for backers. Please use the ercp-dev mailing list again to express your interest to help. I know that it is odd to express interest for full SWT on eSWT mailing list but until SWT community picks up the idea this will have to do.&lt;/p&gt;  </content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/3830471219180671600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/3830471219180671600'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2009/09/eclipse-ercp-13-on-linux-qt.html' title='Eclipse eRCP 1.3 on Linux Qt'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-3129983081750115878</id><published>2009-08-20T07:43:00.001-04:00</published><updated>2009-08-20T07:43:18.841-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="eRCP"/><category scheme="http://www.blogger.com/atom/ns#" term="eSWT"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenVG"/><title type='text'>OpenVG on Eclipse eRCP</title><content type='html'>&lt;p&gt;I have &lt;a href=&quot;http://www.gorkem-ercan.com/2009/06/reflections-of-symbian-foundation-and.html&quot; target=&quot;_blank&quot;&gt;posted&lt;/a&gt; earlier &lt;a href=&quot;http://www.eclipse.org/ercp&quot; target=&quot;_blank&quot;&gt;eRCP&lt;/a&gt; project is getting a &lt;a href=&quot;http://www.qtsoftware.com/&quot; target=&quot;_blank&quot;&gt;Qt&lt;/a&gt; port for eSWT as a contribution from &lt;a href=&quot;http://www.nokia.com/&quot; target=&quot;_blank&quot;&gt;Nokia&lt;/a&gt;. The contribution is on its way and you should expect the first experimental eRCP builds on Linux soon. Qt announcement is an important one which enables that eRCP on more platforms. It also provides Eclipse community with a starting point for a full &lt;a href=&quot;http://www.eclipse.org/swt/&quot; target=&quot;_blank&quot;&gt;SWT&lt;/a&gt; port on Qt. &lt;/p&gt;  &lt;p&gt;While the news of the Qt port is fresh, eRCP project received a new contribution for another UI technology. &lt;a href=&quot;http://www.gorkem-ercan.com/2009/06/reflections-of-symbian-foundation-and.html&quot; target=&quot;_blank&quot;&gt;Microdoc&lt;/a&gt; is contributing Java bindings for &lt;a href=&quot;http://en.wikipedia.org/wiki/OpenVG&quot; target=&quot;_blank&quot;&gt;OpenVG&lt;/a&gt; to eRCP project. OpenVG is an API designed for low level hardware accelerated 2D vector graphics. OpenVG is essentially a mobile device technology utilized mostly by cell phones and handhelds, therefore it is a good match for eRCP.&lt;/p&gt;  &lt;p&gt;Contribution also includes samples for OpenVG. Once the contribution is blessed by the Eclipse legal process the team(with its new member from Microdoc) will work on it to integrate it with the existing eSWT ports and will create OSGi bundles for it.&lt;/p&gt;  </content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/3129983081750115878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/3129983081750115878'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2009/08/openvg-on-eclipse-ercp.html' title='OpenVG on Eclipse eRCP'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-8221126808200167457</id><published>2009-07-10T07:17:00.001-04:00</published><updated>2009-07-10T07:18:13.442-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="Qt"/><title type='text'>What happend to eSWT port on Qt</title><content type='html'>&lt;div style=&quot;clear: both; text-align: left;&quot;&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/_ZT4L3ZsR7hE/SlbytA3cuHI/AAAAAAAABGw/sIkjYS-1gd8/s200/07072009018.JPG&quot; style=&quot;clear: both; float: left; margin: 0px 10px 10px 0px;&quot; /&gt;&lt;/div&gt;In case you are wondering what happened to &lt;a href=&quot;http://www.nokia.com/&quot;&gt;Nokia&lt;/a&gt;&#39;s contribution of the eSWT implementation using &lt;a href=&quot;http://www.qtsoftware.com/&quot;&gt;Qt &lt;/a&gt;here is an update. If you are hearing about such a contribution for the first time, you can read the details in this earlier &lt;a href=&quot;http://www.gorkem-ercan.com/2009/06/reflections-of-symbian-foundation-and.html&quot;&gt;post&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The legal check for the contribution has been completed and we are now clear to check the code into CVS. However, we have a slight delay now. All the developers of the Nokia&#39;s eSWT team that have commit rights are on vacation (as illustrated by footage). Our original plan was to complete  the contribution before the summer holiday&#39;s started but the legal check took longer than we have expected. Nevertheless, the code will be available in late August, and will start spreading the eSWT love to new platforms.&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/8221126808200167457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/8221126808200167457'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2009/07/what-happend-to-eswt-port-on-qt.html' title='What happend to eSWT port on Qt'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_ZT4L3ZsR7hE/SlbytA3cuHI/AAAAAAAABGw/sIkjYS-1gd8/s72-c/07072009018.JPG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-22906747157856249</id><published>2009-06-10T09:40:00.005-04:00</published><updated>2009-06-10T09:48:43.549-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="eSWT"/><category scheme="http://www.blogger.com/atom/ns#" term="Qt"/><category scheme="http://www.blogger.com/atom/ns#" term="SWT"/><title type='text'>CSS support on Qt port of eSWT</title><content type='html'>As I have blogged on my &lt;a href=&quot;http://www.gorkem-ercan.com/2009/06/reflections-of-symbian-foundation-and.html&quot; target=&quot;_blank&quot;&gt;earlier post&lt;/a&gt;, we are replacing the eSWT implementation on &lt;a href=&quot;http://www.nokia.com/&quot; target=&quot;_blank&quot;&gt;Nokia&lt;/a&gt;&amp;nbsp;&lt;a href=&quot;http://www.s60.com/&quot; target=&quot;_blank&quot;&gt;S60&lt;/a&gt; with a &lt;a href=&quot;http://www.qtsoftware.com/&quot; target=&quot;_blank&quot;&gt;Qt&lt;/a&gt; based one. As part of the port we have experimented with some new cool features. One of them is the CSS styling support. &lt;br /&gt;
Here is a video of a demo that is showing the feature. Some of notable things on the demo are linear and circular gradient backgrounds and rounded corners on all widgets. Also styles actually set a top margin to some of the widgets and that works perfectly together with &lt;i&gt;GridLayout &lt;/i&gt;used.&lt;br /&gt;
&lt;br /&gt;
&lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/l5D3jbGDifE&amp;hl=en&amp;fs=1&amp;&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/l5D3jbGDifE&amp;hl=en&amp;fs=1&amp;&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
Of course no eSWT demo is complete without running the same on mobile. Here is the same example application running on Nokia S60 SDK.&lt;br /&gt;
&lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/NQgJBOhbPEw&amp;hl=en&amp;fs=1&amp;&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/NQgJBOhbPEw&amp;hl=en&amp;fs=1&amp;&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
The current state of the contribution is it is submitted to Eclipse for IP check. We are hoping to make the code available as soon as that completes. In the meanwhile, we are looking for individuals and companies who are willing to contribute to the effort to complete the implementation to &lt;a href=&quot;http://www.eclipse.org/swt/&quot; target=&quot;_blank&quot;&gt;SWT&lt;/a&gt; level APIs.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/22906747157856249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/22906747157856249'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2009/06/css-support-on-qt-port-of-eswt.html' title='CSS support on Qt port of eSWT'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-6213928163831129048</id><published>2009-06-08T07:53:00.000-04:00</published><updated>2009-06-08T07:53:42.914-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="eSWT"/><category scheme="http://www.blogger.com/atom/ns#" term="Java ME"/><category scheme="http://www.blogger.com/atom/ns#" term="mobile"/><title type='text'>Comments Open for eSWT-LCDUI bridge API</title><content type='html'>I have posted the draft API for using eSWT widgets with &lt;a href=&quot;http://en.wikipedia.org/wiki/Mobile%20Information%20Device%20Profile&quot; id=&quot;aptureLink_OhnN68YZjj&quot;&gt;LCDUI&lt;/a&gt; on a&lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=279443&quot;&gt; bug report.&lt;/a&gt; This is one of the features that I have blogged about on my &lt;a href=&quot;http://www.gorkem-ercan.com/2009/06/reflections-of-symbian-foundation-and.html&quot;&gt;earlier post&lt;/a&gt; and it has been a desired feature for LCDUI developers on MIDP platforms since the day &lt;a href=&quot;http://www.nokia.com/&quot;&gt;Nokia&lt;/a&gt; started shipping eSWT. The API has a similar structure to SWT-AWT bridge API and allows embedding of eSWT widgets into LCDUI components.&lt;br /&gt;
This API not only aims to provide LCDUI based applications a path to gradually move to eSWT but also enables the platform vendors to gradually implement eSWT APIs on their plarforms as it hides the details of eSWT.&amp;nbsp;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/6213928163831129048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/6213928163831129048'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2009/06/comments-open-for-eswt-lcdui-bridge-api.html' title='Comments Open for eSWT-LCDUI bridge API'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-29853730.post-3120186599064336079</id><published>2009-06-07T04:06:00.002-04:00</published><updated>2009-06-07T04:08:13.273-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="eclipse"/><category scheme="http://www.blogger.com/atom/ns#" term="eSWT"/><category scheme="http://www.blogger.com/atom/ns#" term="mobile"/><category scheme="http://www.blogger.com/atom/ns#" term="Qt"/><category scheme="http://www.blogger.com/atom/ns#" term="SWT"/><category scheme="http://www.blogger.com/atom/ns#" term="Symbian"/><title type='text'>Reflections of Symbian Foundation and Nokia S60 Java Runtime Roadmaps on eSWT</title><content type='html'>&lt;p&gt;I have been meaning to write about the future plans around eSWT for a long time. The recent announcements of &lt;a href=&quot;http://www.symbian.org/&quot;&gt;Symbian Foundation&lt;/a&gt;&amp;#160;&lt;a href=&quot;http://blog.symbian.org/2009/04/30/reviewing-the-release-plan/&quot;&gt;roadmap&lt;/a&gt; and &lt;a href=&quot;http://www.nokia.com/&quot; target=&quot;_blank&quot;&gt;Nokia&lt;/a&gt;&amp;#160;&lt;a href=&quot;http://www.s60.com&quot; target=&quot;_blank&quot;&gt;S60&lt;/a&gt; Java Runtime &lt;a href=&quot;http://events.nokia.com/developersummit/assets/pdf/Java_demo_slides.pdf&quot;&gt;roadmap&lt;/a&gt; has presented the perfect opportunity so here it is.&lt;/p&gt;&lt;p&gt;Let’s start with the major change. As stated on the Symbian &lt;a href=&quot;http://blog.symbian.org/2009/04/30/reviewing-the-release-plan/&quot;&gt;roadmap&lt;/a&gt;, with Symbian^4 release, &lt;a href=&quot;http://www.qtsoftware.com/&quot; target=&quot;_blank&quot;&gt;a Qt&lt;/a&gt; extension called &lt;em&gt;Orbit&lt;/em&gt; will replace the existing &lt;em&gt;Avkon&lt;/em&gt; UI library of the Symbian. Therefore, Nokia’s eSWT team had been working on an eSWT port using &lt;a href=&quot;http://www.qtsoftware.com/&quot; target=&quot;_blank&quot;&gt;Qt&lt;/a&gt; for some time now. We now have full eSWT libraries implemented and running on several platforms including Linux, &lt;a href=&quot;http://www.maemo.org&quot;&gt;Maemo&lt;/a&gt;, Nokia S60 and win32 (probably runs on Mac too but it is never tested). We intend to make the implementation available as soon as we can on Eclipse &lt;a href=&quot;http://www.eclipse.org/ercp&quot; target=&quot;_blank&quot;&gt;eRCP&lt;/a&gt; CVS.&lt;/p&gt;&lt;p&gt;I know that there are many in Eclipse community &lt;a href=&quot;https://bugs.eclipse.org/bugs/show_bug.cgi?id=20486&quot; target=&quot;_blank&quot;&gt;interested&lt;/a&gt; on a &lt;a href=&quot;http://www.eclipse.org/swt/&quot; target=&quot;_blank&quot;&gt;SWT&lt;/a&gt; port on Qt. I have both good and bad news on that. The Qt implementation is done with a different approach compared to earlier eSWT ports. It is implemented in a very similar way to SWT ports rather than eSWT implementations. We have always considered that this implementation would be completed to extent full SWT APIs hence the existing code is suitable for extending to SWT. The bad news is, Nokia’s eSWT team will not do it. We would really like to complete it to SWT ourselves but our expertise and priority is on running eSWT on mobile devices. This does not mean we will not work with people who would like to contribute to a full SWT port. We also want to see a full SWT on Qt and will cooperate with contributors towards that goal. If you would like to contribute to such an effort please come forward and let us know.&lt;/p&gt;&lt;p&gt;A quick look at S60 Java Runtime roadmap reveals some of the features that are planned for eSWT. These features are going to be available on devices together with the Qt based eSWT. I will not go awfully detailed with all those features but rather introduce what is planned but expect detailed posts about them in the future here. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Improved &lt;/strong&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Mobile_Information_Device_Profile&quot; target=&quot;_blank&quot;&gt;MIDP&lt;/a&gt;&lt;strong&gt; interoperability: &lt;/strong&gt;This work is divided into two areas. Improving the coding experience of MIDP developers by introducing new APIs. These APIs will hide some of the common tasks of developing eSWT based UIs by providing utilities.The second part enables the use of rich eSWT widget set within MIDP’s LCDUI components. This works in a similar way to SWT’s AWT bridge. Some of these APIs are drafted and will be open for comments this week on Eclipse bugzilla.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;CSS based styling:&lt;/strong&gt; &lt;a href=&quot;http://www.eclipse.org/e4/&quot; target=&quot;_blank&quot;&gt;E4&lt;/a&gt; project is also introducing CSS styling to Eclipse as well. Current eSWT approach is different from e4, though. Current implementation is providing widget level CSS styling via the method &lt;em&gt;Widget.setStyle(String css). &lt;/em&gt;I will be posting a demo video and more information about this. Stay tuned. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Animations API:&lt;/strong&gt; At the moment, this is an early implementation of the SWT animation APIs drafted as part of e4 project. These are implemented using the &lt;a href=&quot;http://www.qtsoftware.com/products/appdev/add-on-products/catalog/4/Utilities/qtanimationframework/&quot; target=&quot;_blank&quot;&gt;Qt’s new Animation Framework.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Multi-touch and gestures:&lt;/strong&gt; No mobile UI toolkit is complete without these nowadays. The details on these are sketchy at the moment. We are investigating several platforms and APIs to come up with an API that can be implemented on all platforms easily.&lt;/p&gt;&lt;p&gt;If you are willing to participate on any of the work that is happening around this new eSWT platform or any of the new APIs. You can contact and become part of the developer community from the &lt;a href=&quot;https://dev.eclipse.org/mailman/listinfo/ercp-dev&quot; target=&quot;_blank&quot;&gt;eRCP mailing list.&lt;/a&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/3120186599064336079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29853730/posts/default/3120186599064336079'/><link rel='alternate' type='text/html' href='http://www.gorkem-ercan.com/2009/06/reflections-of-symbian-foundation-and.html' title='Reflections of Symbian Foundation and Nokia S60 Java Runtime Roadmaps on eSWT'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>